home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 1.iso / dist / fw_enlightenment.idb / usr / freeware / bin / e_gen_kde_menu.z / e_gen_kde_menu
Text File  |  2001-10-09  |  8KB  |  327 lines

  1. #!/bin/sh
  2. ##############################################################################
  3. # generates a file.menu format for Enlightenment out of a KDE menu hierarchy #
  4. #
  5. # Copyright (C) 1999 Carsten Haitzler, Geoff Harrison and various contributors
  6. # Permission is hereby granted, free of charge, to any person obtaining a copy
  7. # of this software and associated documentation files (the "Software"), to
  8. # deal in the Software without restriction, including without limitation the
  9. # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  10. # sell copies of the Software, and to permit persons to whom the Software is
  11. # furnished to do so, subject to the following conditions:
  12. # The above copyright notice and this permission notice shall be included in
  13. # all copies of the Software, its documentation and marketing & publicity
  14. # materials, and acknowledgment shall be given in the documentation, materials
  15. # and software packages that this Software was used.
  16. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17. # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18. # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  19. # THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  20. # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  21. # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  22. ##############################################################################
  23.  
  24. # if we dont have enough arguments
  25. if [ $# -lt 3 ]; then
  26.   echo "usage:"
  27.   echo "    "$0" base_name output_dir output_file.menu [kde_applnk_base_dir]"
  28.   exit
  29. fi
  30. # setup variables
  31. BASE="$1"
  32. ODIR="$2"
  33. OUT="$3"
  34.  
  35. set_IDIR() {
  36.   # hunt around and see where all the kde graphics have gone
  37.   IDIR=/usr/share/icons
  38.   if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
  39.     IDIR="/usr/local/share/icons"
  40.   else
  41.     return
  42.   fi
  43.   if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
  44.     IDIR="/opt/kde/icons"
  45.   else
  46.     return
  47.   fi
  48.   if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
  49.     IDIR="/opt/kde/share/icons"
  50.   else
  51.     return
  52.   fi
  53.   if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
  54.     IDIR="/usr/local/kde/icons"
  55.   else
  56.     return
  57.   fi
  58.   if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
  59.     IDIR="/usr/local/kde/share/icons"
  60.   else
  61.     return
  62.   fi
  63.   if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
  64.     IDIR="/usr/kde/icons"
  65.   else
  66.     return
  67.   fi
  68.   if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
  69.     IDIR="/usr/kde/share/icons"
  70.   else
  71.     return
  72.   fi
  73.   if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
  74.     IDIR="/usr/share/kde/icons"
  75.   else
  76.     return
  77.   fi
  78.   if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
  79.     IDIR=/usr/freeware/share/icons
  80.   else
  81.     return
  82.   fi
  83.   if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
  84.     IDIR=/usr/freeware/share/kde/icons
  85.   else
  86.     return
  87.   fi
  88.   if [ ! -r "${IDIR}/mini/kcontrol.xpm" ]; then
  89.     IDIR=/usr/freeware/kde/share/icons
  90.   else
  91.     return
  92.   fi
  93. }
  94.  
  95. set_DIR (){
  96.   DIR=/usr/share/applnk
  97.   if [ ! -r "${DIR}//KControl.kdelnk" ]; then
  98.     DIR="/usr/local/share/applnk"
  99.   else
  100.     return
  101.   fi
  102.   if [ ! -r "${DIR}//KControl.kdelnk" ]; then
  103.     DIR="/opt/kde/applnk"
  104.   else
  105.     return
  106.   fi
  107.   if [ ! -r "${DIR}//KControl.kdelnk" ]; then
  108.     DIR="/opt/kde/share/applnk"
  109.   else
  110.     return
  111.   fi
  112.   if [ ! -r "${DIR}//KControl.kdelnk" ]; then
  113.     DIR="/usr/local/kde/applnk"
  114.   else
  115.     return
  116.   fi
  117.   if [ ! -r "${DIR}//KControl.kdelnk" ]; then
  118.     DIR="/usr/local/kde/share/applnk"
  119.   else
  120.     return
  121.   fi
  122.   if [ ! -r "${DIR}//KControl.kdelnk" ]; then
  123.     DIR="/usr/kde/applnk"
  124.   else
  125.     return
  126.   fi
  127.   if [ ! -r "${DIR}//KControl.kdelnk" ]; then
  128.     DIR="/usr/kde/share/applnk"
  129.   else
  130.     return
  131.   fi
  132.   if [ ! -r "${DIR}//KControl.kdelnk" ]; then
  133.     DIR="/usr/share/kde/applnk"
  134.   else
  135.     return
  136.   fi
  137.   if [ ! -r "${DIR}//KControl.kdelnk" ]; then
  138.     DIR="/usr/freeware/share/applnk"
  139.   else
  140.     return
  141.   fi
  142.   if [ ! -r "${DIR}//KControl.kdelnk" ]; then
  143.     DIR="/usr/freeware/share/kde/applnk"
  144.   else
  145.     return
  146.   fi
  147.   if [ ! -r "${DIR}//KControl.kdelnk" ]; then
  148.     DIR="/usr/freeware/kde/share/applnk"
  149.   else
  150.     return
  151.   fi
  152. }
  153.  
  154.  
  155. set_IDIR
  156. # mini icons  are in the icons dir
  157. MIDIR=$IDIR"/mini"
  158.  
  159. # hunt around and see where all the kde applnk stuff is
  160. if [ $# -eq 4 ]; then
  161.   DIR="$4"
  162. else
  163.   set_DIR
  164. fi
  165.  
  166.  
  167. # if the applnk dir doesn't exist in the end then exit
  168. if [ ! -d "$DIR" ]; then
  169.   exit
  170. fi
  171. # if the destination dir doesn't exist - create it
  172. if [ ! -d "$ODIR" ]; then
  173.   mkdir "$ODIR"
  174. fi
  175.  
  176. # function to check its a KDE kdelnk file 
  177. is_kdelnk() {
  178.   VAL="`grep "\[KDE Desktop Entry\]" $1`"
  179.   IS_KDELNK_RETURN=""
  180.   if [ -n "$VAL" ]; then
  181.     IS_KDELNK_RETURN="`awk -F= 'BEGIN { n="" } END { printf("%s", n) } $1 ~ "^Name\\\['$LANG'\\\]" {n=$2;exit} $1 ~ "^Name$" {n=$2}' $1`"
  182.     if [ -n "$IS_KDELNK_RETURN" ]; then
  183.       return 0
  184.     fi
  185.   fi
  186.   return 1
  187. }
  188.  
  189. # function to get the sortorder list -if there is one
  190. get_sortorder() {
  191.   GET_SORTORDER_RETURN="`awk -F= '$1 ~ "^SortOrder$" {printf("%s", $2);}' $1 | sed 's/,/ /g'`"
  192.   if [ -z "$GET_SORTORDER_RETURN" ]; then
  193.     return 1
  194.   fi
  195.   return 0
  196. }
  197.  
  198. get_icon() {
  199.   GET_ICON_RETURN="`awk -F= '$1 ~ "^Icon$" {printf("%s", $2); exit;}' $1`"
  200.   if [ -z "$GET_ICON_RETURN" ]; then
  201.     return 1
  202.   fi
  203.   return 0
  204. }
  205.  
  206. get_miniicon() {
  207.   GET_MINIICON_RETURN="`awk -F= '$1 ~ "^MiniIcon$" {printf("%s", $2); exit;}' $1`"
  208.   if [ -z "$GET_MINIICON_RETURN" ]; then
  209.     if ! get_icon $1; then
  210.       return 1
  211.     fi
  212.     GET_MINIICON_RETURN=$GET_ICON_RETURN
  213.   fi
  214.   return 0
  215. }
  216.  
  217. get_exec() {
  218.   GET_EXEC_RETURN=`awk -F= '$1 ~ "^Exec$" {printf("%s", $2); exit;}' $1 | \
  219.                      sed -e "s:\%c:$2:g"          -e "s:\%m:$3:g" \
  220.                  -e "s:\%i:$4:g"          -e "s:\":\':g" \
  221.              -e "s:\%(u|k|n):NONE:g"  -e "s:\%f:blank:g" \
  222.                          -e "s:\%d:$HOME:g"`
  223.   if [ -z "$GET_EXEC_RETURN" ]; then
  224.     return 1
  225.   fi
  226.   return 0
  227. }
  228.  
  229. E_TITLE="$DIR Menu"
  230.  
  231. # order of the directory
  232. DIRORDER=""
  233. # if a .directory file exists - read it
  234. F="${DIR}/.directory"
  235. if [ -f $F ]; then
  236.   is_kdelnk "$F"
  237.   NAME="$IS_KDELNK_RETURN"
  238.   if [ -n "$NAME" ]; then
  239.     E_TITLE="$NAME"
  240.   fi
  241.   get_sortorder "$F"
  242.   DIRORDER="$GET_SORTORDER_RETURN"
  243. fi
  244.  
  245. # this is to build a complete orderered list
  246. # from DIRORDER and all the sub-directories
  247. # because DIRORDER is often not complete
  248. build_complete_order() {
  249.  DIRLIST=`/bin/ls -F $DIR | grep "/$" | sed "s:/::g"`
  250.  BUILD_COMPLETE_ORDER_RETURN=""
  251.  if [ -z "$DIRORDER" ]; then
  252.    BUILD_COMPLETE_ORDER_RETURN="$DIRLIST"
  253.  else
  254.   BUILD_COMPLETE_ORDER_RETURN="$DIRORDER"
  255.   for subdir in $DIRLIST; do
  256.    # if not in DIRLIST
  257.    pos="`echo $DIRORDER | egrep "(^$subdir | $subdir | $subdir$)"`"
  258.    # case ^$subdir$ not possible because more than one sub-directory
  259.    if [ -z "$pos" ]; then
  260.     BUILD_COMPLETE_ORDER="${BUILD_COMPLETE_ORDER_RETURN} ${subdir}"
  261.    fi
  262.   done
  263.  fi
  264.  
  265.  return 0
  266. }
  267.  
  268. build_complete_order
  269. ORDER="$BUILD_COMPLETE_ORDER_RETURN"
  270.  
  271. # print the menu title
  272. echo "\"$E_TITLE\"" > $OUT
  273.  
  274. # for every subdir in the dir list or order - print it
  275. for F in $ORDER; do
  276.   FF="${DIR}/${F}"
  277.   if [ -d "$FF" ]; then
  278.     NAME="`echo "$F" | sed "s/_/ /g"`"
  279.     FFF="${FF}/.directory"
  280.     if [ -f "$FFF" ]; then
  281.       get_icon "$FFF"
  282.       ICON="$GET_ICON_RETURN"
  283.     else
  284.       ICON=""
  285.     fi
  286.     if [ -n "$ICON" ]; then
  287.       ICON="\"${MIDIR}/${ICON}\""
  288.     else
  289.       ICON="NULL"
  290.     fi
  291.     FFF="${ODIR}/${BASE}"
  292.     if [ ! -d "$FFF" ]; then
  293.       mkdir "$FFF"
  294.     fi
  295.     MFILE="${FFF}/${F}.menu"
  296.     "$0" "${BASE}/${F}" "$ODIR" "$MFILE" "${DIR}/${F}"
  297.     echo "\"$NAME\" $ICON menu \"$MFILE\"" >> $OUT
  298.   fi
  299. done
  300.  
  301. # for all normal files...
  302. FILES="`/bin/ls -F $DIR | grep -v "/$"`"
  303. for F in $FILES; do 
  304.   FF="${DIR}/${F}"
  305.   if [ -f "$FF" ]; then
  306.     is_kdelnk "$FF"
  307.     NAME="$IS_KDELNK_RETURN"
  308.     if [ -n "$NAME" ]; then
  309.       get_miniicon "$FF"
  310.       ICON="$GET_MINIICON_RETURN"
  311.       get_icon "$FF"
  312.       BICON="$GET_ICON_RETURN"
  313.       if [ -n "$ICON" ]; then
  314.     ICON="\"${MIDIR}/${ICON}\""
  315.       else
  316.     ICON="NULL"
  317.       fi
  318.       get_exec "$FF" "$NAME" "$ICON $BICON"
  319.       EXE="$GET_EXEC_RETURN"
  320.       echo "\"$NAME\" $ICON exec \"$EXE\"" >> $OUT
  321.     fi
  322.   fi
  323. done
  324.